//axios的配置
import axios from "axios"
//import { is } from "core-js/core/object"
//引入elementUi中的全局方法
import { MessageBox, Message } from "element-ui"
// console.log(ElementUI);
//console.log(MessageBox);


//对axios进行一些简单的配置
//axios的公共配置
let http = axios.create({
    withCredentials: true,   //是否携带凭证
    baseURL: "/api",   //基础地址
    //timeout:5000,   //超时设置
})


//请求拦截
//假如有100个请求都需要携带相同的参数，在api接口中一个一个携带，重复，麻烦，拦截器可以拦截到每一个请求，进行添加参数，写一次就行
http.interceptors.request.use(config => {
    //config是请求的对象，里面可以拿到请求的地址、参数等
    //获取在localStorage中存储的token
    let token = localStorage.getItem("myx-token")
    config.headers.authorization = token
    //return config  理解为放行
    return config
})

//响应拦截
//在这里处理一些公共的错误
http.interceptors.response.use(config => {
    //config是响应对象，里面可以拿到服务器响应的内容
    //return config  理解为放行
    //console.log(config);
    //嵌套解构语法
    let { data: { state, msg }, code } = config
    //10022 登录过期
    //1004  token过期
    //10026 没有权限
    let codes = ["10022", "1004", "10026"]
    if (codes.includes(code)) {
        //清除token
        localStorage.removeItem("myx-token")
        //刷新页面
        location.reload()
    }
    //console.log(state);    //true


    //一个需要排除掉不弹窗的接口
    let excludeUrl = ["/order/query_order_status"]
    //判断不需要弹窗的这个数组中是否包含当前请求的这个路径
    let isExclude = excludeUrl.includes(config.config.url)
    //拦截器判断后端响应的state
    if (!state && !isExclude) {
        //全局提示
        MessageBox.alert(msg, "错误提示", { type: "error" })
    }
    return config

})
export default http;